package com.szh.service;

import java.util.Map;

/**
 *
 */
public interface AliPayService {
    /**
     * 调用支付宝的统一收单下单并支付页面接口
     * @param productId 商品id
     * @return html形式的form表单，包含自动提交的脚本
     */
    String tradeCreate(Long productId);

    /**
     * 支付完成之后的异步通知，支付宝会根据API中我们设置的 notify_url，通过 POST 请求的形式将支付结果作为参数通知给我们
     * @param params 通知参数
     * @return 支付结果
     */
    String tradeNotify(Map<String, String> params);

    /**
     * 处理业务，修改订单状态，记录支付日志
     * @param params 通知参数
     */
    void processOrder(Map<String, String> params);

    /**
     * 取消订单，调用支付宝统一收单交易关闭接口
     * @param orderNo 订单号
     */
    void cancelOrder(String orderNo);

    /**
     * 查询订单，调用支付宝统一收单交易查询接口
     * @param orderNo 订单号
     * @return String
     */
    String queryOrder(String orderNo);

    /**
     * 申请退单退款，调用支付宝统一收单交易退款接口
     * @param orderNo 订单号
     * @param reason 退款原因
     */
    void refund(String orderNo, String reason);

    /**
     * 查询退款，调用支付宝统一收单交易退款查询接口
     * @param orderNo 订单号
     */
    String queryRefund(String orderNo);

    /**
     * 根据账单类型和日期获取账单url地址，调用支付宝查询对账单下载地址接口
     * @param billDate 账单日期
     * @param type 账单类型
     */
    String queryTradeBill(String billDate, String type);

    /**
     * 根据订单号调用支付宝查单接口，核实订单状态
     * 如果订单未创建，则更新商户端订单状态
     * 如果订单未支付，则调用关单接口关闭订单，并更新商户端订单状态
     * 如果订单已支付，则更新商户端订单状态，并记录支付日志
     * @param orderNo 订单号
     */
    void checkOrderStatus(String orderNo);
}
